/**
 *\file sabot.c
 *\author Raphaël Diana
 */
#include "sabot.h"
#include "time.h"

Carte* creerJeuCarte()
{
    int i, j;
    Carte* jeu;
    jeu=malloc(52 * sizeof(Carte));
    for(i=0; i<52; i++)
    {
        creerCarte(&jeu[i]);
    }
    /* initialiser les cartes */
    for(i=1; i<5; i++)
    {
        for(j=(13*i-13); j<13*i; j++)
        {
            setCouleurCarte(&jeu[j], (enseigne)i);
            setFaceCarte(&jeu[j], (recto)(j%13+1));
        }
    }
    return jeu;
}

void testamentJeuCarte(Carte** jeu)
{
    assert((*jeu)!=NULL);
    free(*jeu);
    (*jeu)=NULL;
}

Carte* tirerCarte(Liste* talon)
{
    return retireEnTete(talon);
}

Carte* getCarte(Liste *l, unsigned int nb)
{
    assert(l!=NULL);
    return getInfo(l, nb);
}

Liste* remplirTalon(Carte* jeu)
{
    int i, j;
    Liste* maListe;
    Liste* talon;
    srand(time(NULL));
    maListe=initListe();
    talon=initListe();
    for(i=0; i<8; i++)
    {
        for(j=0; j<52; j++)
        {
            insertElement(maListe, &jeu[j]);
        }
    }

    for(i=0; i<416; i++)/*416=8*52 cartes*/
    {
        j=1+(int) (416.0*rand()/(RAND_MAX+1.0));
        insertElement(talon, getCarte(maListe, j));
        /*talon->nbCarte=i+1;*/
    }
    testamentListe(&maListe);
    return talon;
}

void testamentTalon(Liste* talon)
{
    assert(talon!=NULL);
    testamentListe(&talon);
}

void afficherTalon(Liste* talon)
{
    assert(talon!=NULL);
    afficheListe(talon);
}

Sabot* initSabot()
{
    Sabot* sabot;
    sabot=malloc(sizeof(Sabot));
    sabot->jeuCarte=creerJeuCarte();
    sabot->talon=remplirTalon(sabot->jeuCarte);
    return sabot;
}

void detruitSabot(Sabot** sabot)
{
    testamentJeuCarte(&(*sabot)->jeuCarte);
    testamentListe(&(*sabot)->talon);
    free(*sabot);
    *sabot=NULL;
}

